<?php

class Requests extends Onecore_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model("requests_model");
        $this->load->model("grupos_model");
        $this->load->model("users_model");
        $this->_moduleName = utf8_encode("Solicitudes de Permiso");
        $this->_moduleDescription = utf8_encode("Description") . $this->_moduleName;
        $this->_modelInstance = $this->requests_model;
    }

    public function index() {
        $banner["module_name"] = $this->_moduleName;
        $banner["module_description"] = $this->_moduleDescription;
        $data["module_banner"] = $this->load->view("/include/sections/module_banner/module_title", $banner, true);
        $data["page_title"] = "Solicitudes";
        $this->layout->view("/solicitudes/index", $data);
    }
    public function validateGroup(){
        $this->load->model("users_model");
        $this->load->model("grupos_model");
        $RequestId = $this->input->post('RequestId');
        $status = $this->input->post('status');
        $obs = $this->input->post('observation');
        $success = false;
        $res = array();
        $errorList = array();
        $mensaje = "Solicitud gestionada en forma exitosa";
        if(!empty($RequestId) && intval($RequestId)>0){
            $request = $this->_modelInstance->getByRequestId($RequestId);
            if(!empty($request[0])){
                $request = $request[0];
                $request->Data = json_decode($request->Data);
                $grupo = $this->grupos_model->getByGrupoId($request->Data->GrupoId);
                $grupo = $grupo[0];
                $this->db->trans_begin();
                if($status ==='accepted_closed'){
                    if (!empty($request->Data->GrupoId)) {
                        $data = array(
                            "id" => array(
                                'GrupoId'=>$request->Data->GrupoId,
                                'TipoGrupoId'=>$grupo->TipoGrupoId,
                                'SectorId'=>$grupo->SectorId,
                                'IglesiaId'=>$grupo->IglesiaId,
                            ),
                            "data" => array(
                                'estado'=>'activo',
                                'observacion'=>$request->Messages."#".$obs
                            )
                        );
                        if ($this->grupos_model->save($data, true)) {
                            $data = array(
                                "id" => array(
                                    'RequestId'=>$RequestId,
                                    'UserIdSend'=>$request->UserIdSend,
                                    'UserIdReceive'=>$request->UserIdReceive
                                ),
                                "data" => array(
                                    'status'=>$status,
                                    'Messages'=>$request->Messages."#".$obs
                                )
                            );
                            if ($this->_modelInstance->save($data, true)) {
                                $success = true;
                            }
                            else{
                                $mensaje = "No se puedo cambiar el estado de la solicitud.";
                                $errorList = array("Error" => $this->_modelInstance->getError());
                            }
                        }
                        else{
                            $mensaje = "No se puedo activar el grupo asociado a la solicitud.";
                            $errorList = array("Error" => $this->grupos_model->getError());
                        }
                    }
                }
                else{
                    if($status ==='denegated_closed'){
                        $data = array(
                            "id" => array(
                                'GrupoId'=>$request->Data->GrupoId,
                                'TipoGrupoId'=>$grupo->TipoGrupoId,
                                'SectorId'=>$grupo->SectorId,
                                'IglesiaId'=>$grupo->IglesiaId,
                            ),
                            "data" => array(
                                'estado'=>'inactivo',
                                'observacion'=>$request->Messages."#".$obs
                            )
                        );
                        if ($this->grupos_model->save($data,true)) {
                            $data2 = array(
                                "id" => array(
                                    'RequestId'=>$RequestId,
                                    'UserIdSend'=>$request->UserIdSend,
                                    'UserIdReceive'=>$request->UserIdReceive
                                ),
                                "data" => array(
                                    'status'=>$status,
                                    'Messages'=>$request->Messages."#".$obs
                                )
                            );
                            if ($this->_modelInstance->save($data2, true)) {
                                $success = true;
                            }
                            else{
                                $mensaje = "No se puedo cambiar el estado de la solicitud.";
                                $errorList = array("Error" => $this->_modelInstance->getError());
                            }
                        }
                        else{
                            $mensaje = "No se puedo remover el grupo asociado a la solicitud.";
                            $errorList = array("Error" => $this->grupos_model->getError());
                        }
                    }
                }
            }
            else{
                $mensaje = "Solicitud incorrecta.";
                $errorList = array("Error" =>'No se encuentra la solicitud buscada');
            }
        }
        else{
            $mensaje = "Solicitud incorrecta.";
            $errorList = array("Error" =>'Parametros invalidos');
        }
        if ($success) {
            $this->db->trans_commit();
        } else {
            $this->db->trans_rollback();
        }
        $res = array(
            "success" => $success,
            "msg" => $mensaje,
            "errors" => $errorList
        );
        $this->layout->printLike(json_encode($res), "json");
    }
    public function validateUser(){
        $this->load->library('email');
        $this->load->model("users_model");
        $this->load->model("grupos_model");
        $RequestId = $this->input->post('RequestId');
        $status = $this->input->post('status');
        $obs = $this->input->post('observation');
        $success = false;
        $res = array();
        $errorList = array();
        $mensaje = "Solicitud gestionada en forma exitosa";
        if(!empty($RequestId) && intval($RequestId)>0){
            $request = $this->_modelInstance->getByRequestId($RequestId);
            if(!empty($request[0])){
                $request = $request[0];
                $request->Data = json_decode($request->Data);
                $user = $this->users_model->getByUserId($request->Data->UserId);
                $user = $user[0];
                $this->db->trans_begin();
                if($status ==='accepted_closed'){
                    if (!empty($request->Data->UserId)) {
                        $data = array(
                            "id" => array(
                                'UserId'=>$request->Data->UserId,
                                'OficioId'=>$user->OficioId,
                                'SectorId'=>$user->SectorId,
                                'SystemRolId'=>$user->SystemRolId,
                            ),
                            "data" => array(
                                'estado'=>'activo'
                            )
                        );
                        if ($this->users_model->save($data, true)) {
                            $data = array(
                                "id" => array(
                                    'RequestId'=>$RequestId,
                                    'UserIdSend'=>$request->UserIdSend,
                                    'UserIdReceive'=>$request->UserIdReceive
                                ),
                                "data" => array(
                                    'status'=>$status,
                                    'Messages'=>$request->Messages."#".$obs
                                )
                            );
                            if ($this->_modelInstance->save($data, true)) {
                                $success = true;
                            }
                            else{
                                $mensaje = "No se puedo cambiar el estado de la solicitud.";
                                $errorList = array("Error" => $this->_modelInstance->getError());
                            }
                        }
                        else{
                            $mensaje = "No se puedo activar el grupo asociado a la solicitud.";
                            $errorList = array("Error" => $this->users_model->getError());
                        }
                    }
                }
                else{
                    if($status ==='denegated_closed'){
                        $data = array(
                            "id" => array(
                                'UserId'=>$request->Data->UserId,
                                'OficioId'=>$user->OficioId,
                                'SectorId'=>$user->SectorId,
                                'SystemRolId'=>$user->SystemRolId,
                            ),
                            "data" => array(
                                'estado'=>'inactivo'
                            )
                        );
                        if ($this->users_model->save($data,true)) {
                            $data2 = array(
                                "id" => array(
                                    'RequestId'=>$RequestId,
                                    'UserIdSend'=>$request->UserIdSend,
                                    'UserIdReceive'=>$request->UserIdReceive
                                ),
                                "data" => array(
                                    'status'=>$status,
                                    'Messages'=>$request->Messages."#".$obs
                                )
                            );
                            if ($this->_modelInstance->save($data2, true)) {
                                $success = true;
                            }
                            else{
                                $mensaje = "No se puedo cambiar el estado de la solicitud.";
                                $errorList = array("Error" => $this->_modelInstance->getError());
                            }
                        }
                        else{
                            $mensaje = "No se puedo remover el grupo asociado a la solicitud.";
                            $errorList = array("Error" => $this->users_model->getError());
                        }
                    }
                }
              //  $mensaje = 'Solicitud gestionada';
                $redirect = true;
                $this->email->clear();
                $receptorName = $user->nombre1.' '.$user->apellido1;
                $this->email->from('notificacion-noresponder@sacc.cl', 'SACC');
                $this->email->to($user->email); 
                $this->email->subject('Estado solicitud de cuenta SACC');
                $this->email->message($obs.' <br>----------------------------------<br>SACC - Sistema de administración de Congregaciones Cristianas.');
                $this->email->send();
            }
            else{
                $mensaje = "Solicitud incorrecta.";
                $errorList = array("Error" =>'No se encuentra la solicitud buscada');
            }
        }
        else{
            $mensaje = "Solicitud incorrecta.";
            $errorList = array("Error" =>'Parametros invalidos');
        }
        if ($success) {
            $this->db->trans_commit();
        } else {
            $this->db->trans_rollback();
        }
        $res = array(
            "success" => $success,
            "msg" => $mensaje,
            "errors" => $errorList
        );
        $this->layout->printLike(json_encode($res), "json");
    }
    public function validateInvitation(){
        $this->load->library('email');
        $this->load->model("users_model");
        $this->load->model("grupos_model");
        $this->load->model("rols_model");
        $RequestId = $this->input->post('RequestId');
        $status = $this->input->post('status');
        $obs = $this->input->post('observation');
        $success = false;
        $res = array();
        $errorList = array();
        $mensaje = "Solicitud gestionada en forma exitosa";
        
        if(!empty($RequestId) && intval($RequestId)>0){
            $request = $this->_modelInstance->getByRequestId($RequestId);
            if(!empty($request[0])){
                $request = $request[0];
                $request->Data = json_decode($request->Data);
                $user = $this->users_model->getByUserId($request->Data->UserId);
                $user = $user[0];
                $this->db->trans_begin();
                if($status ==='accepted_closed'){
                    if (!empty($request->Data->UserId)) {
                        $dataRol = array(
                            "id" => '',
                            "data" => array(
                                'UserId'=>$request->Data->UserId,
                                'GrupoId'=>$request->Data->GrupoId,
                                'TipoRolId'=>$request->Data->TipoRolId,
                                'Log'=>date('Y-m-d'),
                                'created'=>date('Y-m-d')
                            )
                        );
                        if ($this->rols_model->save($dataRol, false)) {
                            $data = array(
                                "id" => array(
                                    'RequestId'=>$RequestId,
                                    'UserIdSend'=>$request->UserIdSend,
                                    'UserIdReceive'=>$request->UserIdReceive
                                ),
                                "data" => array(
                                    'status'=>$status,
                                    'Messages'=>$request->Messages."#".$obs
                                )
                            );
                            if ($this->_modelInstance->save($data, true)) {
                                $success = true;
                            }
                            else{
                                $mensaje = "No se puedo cambiar el estado de la solicitud.";
                                $errorList = array("Error" => $this->_modelInstance->getError());
                            }
                        }
                        else{
                            $mensaje = "No se puedo activar el grupo asociado a la solicitud.";
                            $errorList = array("Error" => $this->rols_model->getError());
                        }
                    }
                }
                else{
                    if($status ==='denegated_closed'){
                        $dataRol = array(
                            "id" => '',
                            "data" => array(
                                'UserId'=>$request->Data->UserId,
                                'GrupoId'=>$request->Data->GrupoId,
                                'TipoRolId'=>$request->Data->TipoRolId,
                                'Log'=>date('Y-m-d'),
                                'created'=>date('Y-m-d')
                            )
                        );
                        if ($this->rols_model->save($dataRol, false)) {
                            $data2 = array(
                                "id" => array(
                                    'RequestId'=>$RequestId,
                                    'UserIdSend'=>$request->UserIdSend,
                                    'UserIdReceive'=>$request->UserIdReceive
                                ),
                                "data" => array(
                                    'status'=>$status,
                                    'Messages'=>$request->Messages."#".$obs
                                )
                            );
                            if ($this->_modelInstance->save($data2, true)) {
                                $success = true;
                            }
                            else{
                                $mensaje = "No se puedo cambiar el estado de la solicitud.";
                                $errorList = array("Error" => $this->_modelInstance->getError());
                            }
                        }
                        else{
                            $mensaje = "No se puedo asociar al usuario con el grupo.";
                            $errorList = array("Error" => $this->rols_model->getError());
                        }
                    }
                }
              //  $mensaje = 'Solicitud gestionada';
                $redirect = true;
                $this->email->clear();
                $receptorName = $user->nombre1.' '.$user->apellido1;
                $this->email->from('notificacion-noresponder@sacc.cl', 'SACC');
                $this->email->to($user->email); 
                $this->email->subject('Estado invitacion en Grupo SACC');
                $this->email->message($obs.' <br>----------------------------------<br>SACC - Sistema de administración de Congregaciones Cristianas.');
                $this->email->send();
            }
            else{
                $mensaje = "Solicitud incorrecta.";
                $errorList = array("Error" =>'No se encuentra la solicitud buscada');
            }
        }
        else{
            $mensaje = "Solicitud incorrecta.";
            $errorList = array("Error" =>'Parametros invalidos');
        }
        if ($success) {
            $this->db->trans_commit();
        } else {
            $this->db->trans_rollback();
        }
        $res = array(
            "success" => $success,
            "msg" => $mensaje,
            "errors" => $errorList
        );
        $this->layout->printLike(json_encode($res), "json");
        
    }
    public function get() {
        $this->load->model("users_model");
        $this->load->model("grupos_model");
        $this->load->model("tiporols_model");
        $status = $this->input->post('status');
        $success = false;
        $res = false;
        $respone = array();
        $errorList = array();
        $mensaje = "";
        $uid = $this->session->userdata('uid');
        $user = $this->users_model->getByUserId($uid);
        if (!empty($user)) {
            $user = $user[0];
            $requests = $this->_modelInstance->getGroupsByReceiver($uid,$status);
            $requestsUsers = $this->_modelInstance->getNewUsersbyReceiver($uid,$status);
            $requestsInvitations = $this->_modelInstance->getInvitations($uid,$status);
            
            foreach ($requests as $request) {
                if (!empty($request->Data)) {
                    $request->Data = json_decode($request->Data);
                    if (!empty($request->Data->GrupoId)) {
                        $grupo = $this->grupos_model->getGroupsData($request->Data->GrupoId);
                        if (!empty($grupo))
                            $request->Grupo = $grupo[0];
                    }
                }
                $res['groups'][] = $request;
            }
            foreach ($requestsUsers as $request) {
                if (!empty($request->Data)) {
                    $request->Data = json_decode($request->Data);
                    if (!empty($request->Data->UserId)) {
                        $user = $this->users_model->getUserData($request->Data->UserId);
                        if (!empty($user))
                            $request->User = $user;
                    }
                }
                $res['users'][] = $request;
            }
            foreach ($requestsInvitations as $request) {
                if (!empty($request->Data)) {
                    $request->Data = json_decode($request->Data);
                    if (!empty($request->Data->UserId) && !empty($request->Data->GrupoId)) {
                        $user = $this->users_model->getUserData("635");
                        $grupo = $this->grupos_model->getGroupsData($request->Data->GrupoId);
                        $tipoRol = $this->tiporols_model->getByTipoRolId($request->Data->TipoRolId);
                        if (!empty($user) && !empty($grupo)){
                            $request->User = $user;
                            $request->Grupo = $grupo[0];
                            $request->TipoRol = $tipoRol[0];
                        }
                    }
                }
                $res['invitations'][] = $request;
            }
        }
        else {
            $mensaje = "El usuario debe existir para completar esta operación.";
            $errorList = array("Error" => "El usuario debe existir para completar esta operación.");
        }
        $respone = array(
            "success" => $success,
            "msg" => $mensaje,
            "errors" => $errorList,
            "data" => $res
        );
        $this->layout->printLike(json_encode($respone), "json");
    }

}

?>
